from django.http import HttpResponse , HttpResponseRedirect
from django.shortcuts import render

def page_2003_view(request):
    html = "<h1>这是第一个django页面</h1>"
    return HttpResponse(html)

def index_view(request):
    html = "<h1>这是主页面</h1>"
    return HttpResponse(html)

def page1_view(request):
    html = "这是编号为1的网页"
    return HttpResponse(html)

def page2_view(request):
    html = "这是编号为2的网页"
    return HttpResponse(html)

def pagen_view(request , pg):
    html = '这是编号为%s的网页！~！！！'%(pg)
    return HttpResponse(html)

#计算器的路由接受函数
#1.基础为纲 这是没问题的
#1.定义函数
#2.传递参数
#3.定义变量
#4.not in
#5.列表
#6.运算符
#7return
#下面的代码其实都是基础 所以 基础为纲没问题
def calculator(request , num1 , oper , num2):
    #如果运算符没有在下面四个中 就代表符号是错误的
    if oper not in ['add' , 'sub' , 'mul' , 'flor']:
        return HttpResponse('Your oper is wrong')
    result = 0
    if oper == 'add':#加
        result = num1 + num2
    elif oper == 'sub':
        result = num1 - num2
    elif oper == 'mul':
        result = num1 * num2
    elif oper == 'flor':
        result = num1 / num2
    return HttpResponse(f"结果为:{result}")

def calculator_pat(request , num1 , oper , num2):
    html = f"{num1} - {oper} - {num2}"
    #必须要使用HttpResponse作为返回才可以 否则是会报错的
    return HttpResponse(html)

def bio(request , username):
    html = username
    return HttpResponse(html)

#参数名称传递
def birthday_view(request , y , m , d):
    html_res = f"{y}年{m}月{d}日"
    return HttpResponse(html_res)


def test_request(request):
    #url字符串
    print('path info is' , request.path_info)
    #字符串,表示Http请求方法,常用值:'GET' , 'POST'
    print('method is' , request.method)
    #QueryDict查询字典的对象,包含get请求方式的所有数据
    print('queryString is' , request.GET)
    #QueryDict查询字典的对象,包含post请求方式的所有数据
    print('full path is' , request.get_full_path())
    return HttpResponse('test request ok')
    #重定向
    # return HttpResponseRedirect('page/1')


POST_FORM = '''
    <form method="post" action="/test_get_post">
        用户名:<input type="text" name="uname" />
        <input type='submit' value='提交' />
    </form>
'''


def test_get_post(request):
    if request.method == 'GET':
        #处理GET请求
        #第一种方式 【没有设置默认值，当参数不传递的时候会报错】
        # print(request.GET['name'])
        # print(request.GET['age'])

        #第二种请求方式【可以设置默认值，当参数不传递的时候使用默认值，是不会报错的】
        # print(request.GET.get('name' , 'some'))
        # print(request.GET.get('age' , '0'))

        #第三种请求方式 [获取相同的参数，并且组成一个列表，相当于是复选框]
        hobbys = request.GET.getlist("hobby")
        print(hobbys)

        # return HttpResponse('GET请求')
        #get请求返回一个表单
        return HttpResponse(POST_FORM)
    elif request.method == 'POST':
        #处理用户提交的数据
        print('uname is' , request.POST['uname'])
        #处理POST请求
        return HttpResponse(request.POST['uname'])
    else:
        #处理其他请求
        return HttpResponse('其他请求')


#计算器
def cal_two(request):
    op = request.GET.get('op' , 'add')
    x = int(request.GET.get('x' , 0))
    y = int(request.GET.get('y' , 0))
    result = 0
    if op == 'add':
        result = x + y
    elif op == 'jian':
        result = x - y
    elif op == 'cheng':
        result = x * y
    elif op == 'chu':
        result = x / y
    return HttpResponse(result)


#模版测试
def test_html(request):
    #----------------方案1----------------------
    # #导入loader模块
    # from django.template import loader
    # #1.通过loader加载模版
    # t = loader.get_template('test_html.html')
    # #w.将t转换成HTML字符串
    # html = t.render()
    # #3.用响应对象将转换的字符串内容返回给浏览器
    # return HttpResponse(html)

    #----------------方案2------------------------
    #使用render()直接加载并响应模版
    #在视图函数中,可以将python变量封装到字典中传递到模版中
    dict_show = {
        "name" : 'liuhouse',
        "age" : '22'
    }

    return render(request , 'test_html.html',dict_show)


#测试参数
def test_html_param(request):
    dic = {}
    dic['int'] = 88
    dic['str'] = 'guoxiaonao'
    dic['lst'] = ['Tom' , 'Jack' , 'Lily']
    dic['dict'] = {'a' : 9 , 'b' : 8}
    dic['func'] = say_hi
    dic['class_obj'] = Dog()
    dic['script'] = '<script>alert(1111)</script>'
    return render(request , 'test_html_param.html' , dic)

def say_hi():
    return 'hahaha'

class Dog:
    def say(self):
        return 'wangwang'


def test_if_for(request):
    dic = {}
    dic['x'] = 20
    dic['lst'] = ['Tom' , 'Jack' , 'Lily']
    return render(request , 'test/test_if_for.html' , dic)



#计算器页面
def mycal(request):
    #如果是GET请求,就显示出计算器的页面
    if request.method == 'GET':
        return render(request , 'cal.html')
    elif request.method == 'POST':
        #处理计算
        x = int(request.POST['x'])
        y = int(request.POST['y'])
        op = request.POST['op']

        result = 0
        if op == 'add':
            result = x + y
        elif op =='sub':
            result = x - y
        elif op == 'mul':
            result = x * y
        elif op == 'div':
            result = x / y


        #新版本的pycharm真的是太智能了，所以要接受新鲜的事务，也许会发现其中的乐趣
        # dic = {'x' : x, 'y' : y, 'op' : op , 'result' : result}
        #locals()函数将当前的所有变量都组合成一个字典
        dic = locals()
        return render(request , 'cal.html' , dic)


#编写父页面
def base_view(request):
    #模版继承的时候，服务器端的动态内容无法继承
    lst = ['Tom' , 'Jack']
    return render(request , 'demo1/base.html' , locals())

#编写音乐页面
def music_view(request):
    current = 'music'
    return render(request , 'demo1/music.html' , locals())

#编写运动页面
def sport_view(request):
    current = 'sport'
    return render(request , 'demo1/sport.html' , locals())

def test_url(request):
    return render(request , 'test_url.html')

def test_url_result(request , age):
    #url解析
    from django.urls import reverse
    #302跳转
    #使用反向解析得到url,然后进行重定向
    url = reverse('base_index')
    return HttpResponseRedirect(url)
    # return HttpResponse(f"test url res is ok{age}")


#测试静态文件
def test_static(request):
    return render(request , 'test_static.html')